/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.ivanbiz.service;

import com.ivanbiz.dao.PenggunaDAO;
import com.ivanbiz.dao.PerusahaanDAO;
import com.ivanbiz.dao.impl.PenggunaDAOImpl;
import com.ivanbiz.dao.impl.PerusahaanDAOImpl;
import com.ivanbiz.model.Pengguna;
import com.ivanbiz.model.Perusahaan;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.zkoss.zhtml.Messagebox;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Executions;
import org.zkoss.zk.ui.Sessions;
import org.zkoss.zk.ui.select.SelectorComposer;
import org.zkoss.zk.ui.select.annotation.Listen;
import org.zkoss.zk.ui.select.annotation.Wire;
import org.zkoss.zul.Textbox;
import org.zkoss.zul.Window;

/**
 *
 * @author iw20149x
 */
public class LoginService extends SelectorComposer<Component> {

    PenggunaDAO penggunaDAO;
    PerusahaanDAO perusahaanDAO;
    @Wire
    Window win;
    @Wire
    Textbox userName;
    @Wire
    Textbox password;

    @Override
    public void doAfterCompose(Component comp) throws Exception {
        super.doAfterCompose(comp);
        penggunaDAO = new PenggunaDAOImpl();
        perusahaanDAO = new PerusahaanDAOImpl();
        loadPerusahaan();
    }

    @Listen("onClick=#login;")
    public void login() {
        try {
            MD5 md5 = new MD5(password.getValue());
            Pengguna pengguna = penggunaDAO.login(userName.getValue(), md5.asHex());
            if (pengguna == null) {
                Messagebox.show("userName tidak ada");
            } else if (!pengguna.getPassword().equals(md5.asHex())) {
                Messagebox.show("password salah");
            } else {
                win.detach();
                Map map = new HashMap();
                map.put("pengguna", pengguna);
                Sessions.getCurrent().setAttribute("pengguna", pengguna);
                Executions.createComponents("/main.zul", null, map);
            }
        } catch (Exception ex) {
            Logger.getLogger(LoginService.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    private void loadPerusahaan() {
        try {
            List<Perusahaan> loadPerusahaan = perusahaanDAO.getAll(Perusahaan.class);
            for (Perusahaan perusahaan : loadPerusahaan) {
                Sessions.getCurrent().setAttribute("perusahaan", perusahaan);
            }
        } catch (Exception ex) {
            Logger.getLogger(LoginService.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}
